//
// Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011
//
// Copyright: See COPYING file that comes with this distribution
//

#ifndef FASYS_FASYS_MESSAGE_HPP
#define FASYS_FASYS_MESSAGE_HPP

#include "types.hpp"

namespace fasys{

struct message
{
  /**Идентификатрор сообщения. Уникальный для канала. */
  message_id_t  message_id;
  /**Идентификатрор канала. Уникальный для клиента. */
  channel_id_t  channel_id;
  /**Количество сообщений в канале на момент публикации */
  size_t count;
  /** Время на сервере, когда сообщение умрет */
  time_t        death_time;
  /** Интервал времени до смерти сообщения */
  time_t        death_timespan;
  /** Порядок в канале */
  order_t       order;
  /** Время создания */
  time_t        create_time;
  /** Время жизния в канале */
  time_t        lifetime;
  /** Количество сообщений в канале (0-удаляет все сообщения, можно использовать в качестве ретранслятора) */
  size_t        limit;
  /** имя канала */
  std::string   channel;
  /** контент сообщения. */
  data_t        content;

  message()
    : message_id(0)
    , channel_id(0)
    , count(0)
    , death_time(0)
    , death_timespan(0)
    , order(0)
    , create_time(0)
    , lifetime(0)
    , limit(0)
  {}

  // необходимый минимум для публикации (остальное вручную)
  void create(const std::string& channel, size_t limit, time_t lifetime, order_t order)
  {
    this->channel = channel;
    this->limit = limit;
    this->lifetime = lifetime;
    this->order = order;
  }

  void str(const std::string& str)
  {
    content.assign(str.begin(), str.end() );
  }

  std::string str() const 
  {
    return std::string(content.begin(), content.end());
  }
};

}

#endif

